iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
自我挑戰組

從0到有學習JavaScript系列 第 7

第三章 型別、值和變數-問題筆記 BigInt

  • 分享至 

  • xImage
  •  

問題一、什麼是最大安全整數?
整數數值超過了number可以表達的範圍,也就是超過了 2^53-1 (9007199254740991) 就會開始產生誤差,必須特別注意。這個數值又稱為最大安全整數,是 JavaScript 可以準確表示的最大整数。
而最大安全數是由下面程式碼得出來的。

Number.MAX_SAFE_INTEGER;   //9007199254740991

問題二、BigInt是什麼?
如果整數超過最大安全整數,在 JavaScript計算中可能會出錯。所以會使用BigInt做處理,便能夠準確計算出很大很大的數字。
BigInt會在整數後面加上一個n,也適用於任何進位制。

1234n                  //BigInt字面值
0b11111n               //二進位的BigInt
0o7777n                //八進位的BigInt
0x8000000000000000n    // 2n**63n :一個64位元整數

可以透過一個 Number 型別的 Number.isSafeInteger() 函式來判斷該數值物件是否為安全整數

Number.isSafeInteger(1234);    //true
Number.isSafeInteger(3.1);     //false

BigInt不能和Number混再一起進行運算:

10n+5;  //Cannot mix BigInt and other types...

問題三、BigInt 轉換 Number有什麼風險?
BigInt 和Number 兩者直接轉換一樣是錯誤的。

1234567890123456789012345678901234567890n;   
//結果:1234567890123456789012345678901234567890n

Number(1234567890123456789012345678901234567890n);
//結果:1.2345678901234568e+39

問題四、BigInt運算是什麼?
加、減、乘都能夠精確表達出正確數字,但除法若有餘數會被捨去。

1000n+2000n;   //3000n
3000n-2000n;   //1000n
2000n*3000n;   //6000000n
3000n/997n;    //3n    用計算機算應為3.070624360286592,小數點後直接被BigInt捨去
2n/3n;         //0n    小數點後直接被BigInt捨去

注意:
任何JavaScript的Math物件都不接受BigInt運算元。

Reference
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt
https://blog.miniasp.com/post/2020/02/21/JavaScript-Numbers-Deep-Dive


上一篇
第三章 型別、值和變數-問題筆記 parseInt
下一篇
第三章 型別、值和變數-問題筆記 反斜線字元、正規表達式
系列文
從0到有學習JavaScript31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言